package com.woniuxy.mapper;

import com.woniuxy.entity.*;
import com.woniuxy.entity.DTO.*;
import com.woniuxy.entity.GoodsCommit;
import com.woniuxy.entity.OrderStatus;
import com.woniuxy.entity.Orders;
import com.woniuxy.entity.PaymentMethod;
import com.woniuxy.util.ResponseData;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
* @author PC
* @description 针对表【orders(订单表)】的数据库操作Mapper
* @createDate 2025-05-12 17:08:40
* @Entity com.woniuxy.entity.Orders
*/
public interface OrdersMapper {
    /**
     * <p>连表查询所有订单信息。</p>
     * <p>关联表： orders 、 order_items 、 order_status 、 payment_method 。</p>
     * @return 完整（未分页）的订单信息列表。
     */
    List<OrderDTO> selectAllOrders();

    /**
     * 查询所有订单状态
     * @return 订单状态列表
     */
    List<OrderStatus> selectAllStatus();

    /**
     * <p>查询所有支付方式。</p>
     * @return 支付方式列表
     */
    List<PaymentMethod> selectAllPaymentMethod();

    /**
     * <p>根据条件联表查询所有订单信息。</p>
     * @param param 查询条件
     * @return 订单信息列表
     */
    List<OrderDTO> selectOrdersByCondition(OrderDTO param);

    /**
     * <p>根据订单编号查询订单详情信息。</p>
     * @param orderId 订单编号
     * @return 订单详情
     */
    OrderDTO selectOrderItemByOrderId(String orderId);

    /**
     * <p>根据订单编号查询订单商品信息。</p>
     * @param orderId 订单编号
     * @return 订单商品列表
     */
    List<OrderItemDTO> selectOrderGoodsList(String orderId);
/**
**********************用户端操作**************************************************************
 */
    /**
     * 根据状态index查找用户端订单信息
     */
    List<OrderUserDTO> queryOrderByStatus(@Param("indexs") List<Integer> indexs, @Param("userId") Integer userId);
    List<GoodsImageSrcDTO> queryOrderImage(List<String> OrderIds);
    void deleteUserOrderItemByOrderId(String orderId);
    void deleteUserOrderByOrderId(String orderId,Integer userId);
    OrderItemAndAddressDTO queryOrderItemByOrderId(String orderId);
    List<GoodsItemDTO> queryOrderItemImage(String orderId);
    List<GoodsImageSrcDTO> queryImgSrc(String orderId);
    void addComment(List<GoodsCommit> goodsCommitDTOS);
    void updateStatus(Integer userId,String orderId);


    /**
     * <p>计算被选中的商品的总价格</p>
     * @param userId 被选中的商品
     * @return 总价格
     */
    BigDecimal selectTotalAmount(Integer userId);

    /**
     * <p>插入来自购物车的订单。</p>
     *
     * @param orders 订单信息
     * @return
     */
    void insertOrdersFromCart(Orders orders);

    /**
     * <p>提交订单</p>
     * @param submitOrderDTO
     */
    void updateSubmitOrder(SubmitOrderDTO submitOrderDTO);

    /**
     * <p>支付</p>
     * @param orderId
     */
    void updatePayOrder(@Param("userId") Integer userId, @Param("orderId") String orderId);

    /**
     * <p>根据用户ID删除购物车</p>
     * @param userId
     */
    void deleteShoppingCartByUserId(Integer userId);

    /**
     * <p>超时取消订单：根据订单ID查询订单状态</p>
     * @param orderId
     * @return
     */
    Orders selectOrderByOrderId(String orderId);

    /**
     * <p>更新订单状态</p>
     * @param orders1
     */
    void updateOrderStatus(Orders orders1);

    /**
     * <p>获取订单地址</p>
     * @param orderId
     * @return
     */
    Integer selectOrderAddressByOrderId(String orderId);

    /**
     * <p>根据订单地址ID计算仓库ID</p>
     *
     * @param addressId
     * @return
     */
    List<Integer> selectWareHouseIdByAddressId(Integer addressId);

    /**
     * <p>用户支付后，生成分拣订单</p>
     * @param orderId
     * @param wareHouseId
     */
    void insertSorting(@Param("orderId") String orderId, @Param("wareHouseId") Integer wareHouseId);

    /**
     * <p>查询商品名称和价格</p>
     * @param goodsId
     * @return
     */
    Goods selectGoodsByGoodsId(Integer goodsId);

    void insertOrdersForCommonGoods(Orders orders);

    void insertOrderItemForCommonGoods(OrderItems orderItems);

    List<Goods> selectGoodsListByGoodsIds(List<Integer> goodsIds);

    void insertBatchOrderItems(List<OrderItems> orderItemsList);

    Integer selectOrderStatus(@Param("userId") Integer userId, @Param("orderId") String orderId);
}
